Skill

Subject এর ধারণা

Java Technologies - আরএক্সজাভা (RxJava)
260

RxJava-তে Subject হলো একটি বিশেষ ধরনের Observable এবং Observer। এটি বাইমুখী যোগাযোগ প্রদান করে। Subject-এর মাধ্যমে ডাটা এমিট এবং সাবস্ক্রাইব উভয় কাজ করা যায়। এটি একসাথে একটি Observable এবং একটি Observer-এর কাজ সম্পন্ন করে।


Subject-এর কাজ এবং বৈশিষ্ট্য:

  1. Observable-এর মতো কাজ:
    • এটি ডাটা এমিট করে এবং এক বা একাধিক Observer-কে ডাটা সরবরাহ করে।
  2. Observer-এর মতো কাজ:
    • এটি অন্য Observable থেকে ডাটা গ্রহণ করতে পারে।

Subject-এর প্রধান কাজের ধাপ:

  1. অন্য Observable থেকে ডাটা গ্রহণ।
  2. সেই ডাটা এক বা একাধিক Observer-এ সরবরাহ।

RxJava-তে বিভিন্ন ধরনের Subject:

RxJava-তে ৪ প্রকারের Subject পাওয়া যায়, প্রতিটির আলাদা আলাদা বৈশিষ্ট্য রয়েছে।

Subject Typeবৈশিষ্ট্য
PublishSubjectশুধুমাত্র সাবস্ক্রাইব করার পর থেকে ডাটা পায়।
BehaviorSubjectসর্বশেষ ইমিট হওয়া ডাটাসহ নতুন সাবস্ক্রাইবারদের ডাটা সরবরাহ করে।
ReplaySubjectসমস্ত ইমিট হওয়া ডাটাকে রিপ্লে করে।
AsyncSubjectObservable সম্পন্ন হওয়ার পর শুধুমাত্র সর্বশেষ ডাটাকে ইমিট করে।

PublishSubject উদাহরণ:

import io.reactivex.rxjava3.subjects.PublishSubject;

public class PublishSubjectExample {
    public static void main(String[] args) {
        PublishSubject<String> subject = PublishSubject.create();

        // প্রথম সাবস্ক্রাইবার
        subject.subscribe(data -> System.out.println("Subscriber 1: " + data));

        subject.onNext("Hello");
        subject.onNext("RxJava");

        // দ্বিতীয় সাবস্ক্রাইবার (এটি শুধুমাত্র পরবর্তী ডাটাগুলো পাবে)
        subject.subscribe(data -> System.out.println("Subscriber 2: " + data));

        subject.onNext("Subject");
        subject.onComplete();
    }
}

আউটপুট:

Subscriber 1: Hello
Subscriber 1: RxJava
Subscriber 1: Subject
Subscriber 2: Subject

BehaviorSubject উদাহরণ:

import io.reactivex.rxjava3.subjects.BehaviorSubject;

public class BehaviorSubjectExample {
    public static void main(String[] args) {
        BehaviorSubject<String> subject = BehaviorSubject.create();

        subject.onNext("Initial");

        // প্রথম সাবস্ক্রাইবার (সর্বশেষ ডাটা সহ শুরু করবে)
        subject.subscribe(data -> System.out.println("Subscriber 1: " + data));

        subject.onNext("Hello");
        subject.onNext("RxJava");

        // দ্বিতীয় সাবস্ক্রাইবার (সর্বশেষ ডাটা সহ শুরু করবে)
        subject.subscribe(data -> System.out.println("Subscriber 2: " + data));

        subject.onNext("Subject");
        subject.onComplete();
    }
}

আউটপুট:

Subscriber 1: Initial
Subscriber 1: Hello
Subscriber 1: RxJava
Subscriber 2: RxJava
Subscriber 1: Subject
Subscriber 2: Subject

ReplaySubject উদাহরণ:

import io.reactivex.rxjava3.subjects.ReplaySubject;

public class ReplaySubjectExample {
    public static void main(String[] args) {
        ReplaySubject<String> subject = ReplaySubject.create();

        subject.onNext("Hello");
        subject.onNext("RxJava");

        // প্রথম সাবস্ক্রাইবার (সমস্ত ডাটা পাবে)
        subject.subscribe(data -> System.out.println("Subscriber 1: " + data));

        subject.onNext("Subject");

        // দ্বিতীয় সাবস্ক্রাইবার (সমস্ত ডাটা পাবে)
        subject.subscribe(data -> System.out.println("Subscriber 2: " + data));

        subject.onComplete();
    }
}

আউটপুট:

Subscriber 1: Hello
Subscriber 1: RxJava
Subscriber 1: Subject
Subscriber 2: Hello
Subscriber 2: RxJava
Subscriber 2: Subject

AsyncSubject উদাহরণ:

import io.reactivex.rxjava3.subjects.AsyncSubject;

public class AsyncSubjectExample {
    public static void main(String[] args) {
        AsyncSubject<String> subject = AsyncSubject.create();

        subject.onNext("Hello");
        subject.onNext("RxJava");
        subject.onNext("Subject");

        // সাবস্ক্রাইবার
        subject.subscribe(data -> System.out.println("Subscriber: " + data));

        subject.onComplete();
    }
}

আউটপুট:

Subscriber: Subject

Subject-এর ব্যবহার ক্ষেত্র:

  1. Event Broadcasting:
    • ডাটা বিভিন্ন অংশে শেয়ার করার জন্য।
  2. State Management:
    • অ্যাপ্লিকেশনের ডাটা স্টেট পর্যবেক্ষণ।
  3. Multicasting:
    • একই ডাটা একাধিক সাবস্ক্রাইবারে পাঠানো।

সংক্ষেপে, RxJava-এর Subject হলো একটি শক্তিশালী টুল যা একসাথে Observable এবং Observer-এর কাজ সম্পন্ন করে। এটি ডাটা শেয়ারিং এবং মাল্টি-কাস্টিং-এর জন্য খুবই কার্যকর।

Content added By

Subject কি এবং কিভাবে কাজ করে?

176

Subject হলো RxJava এর একটি বিশেষ উপাদান, যা Observable এবং Observer উভয়ের মতো আচরণ করে। এটি একদিকে ডেটা স্ট্রিম গ্রহণ করতে পারে (যেমন একটি Observer), আবার অন্যদিকে সেই ডেটা স্ট্রিমকে একাধিক সাবস্ক্রাইবারের মধ্যে বিতরণ করতে পারে (যেমন একটি Observable)।

Subject কেন প্রয়োজন?

  1. Multicasting Support:
    সাধারণত, একটি Observable ডেটা একাধিক Observer এর মধ্যে শেয়ার করতে পারে না। কিন্তু Subject ব্যবহার করে আপনি একই ডেটা স্ট্রিম একাধিক Observer এর মধ্যে শেয়ার করতে পারবেন।
  2. Hot Observable Creation:
    Subject হলো hot observable, যা অর্থ, এটি ডেটা প্রেরণ শুরু করার পর সাবস্ক্রাইবার যুক্ত হলেও শুধুমাত্র বর্তমান ডেটা স্ট্রিম পায়।
  3. Bidirectional Communication:
    Subject ডেটা প্রেরণ এবং গ্রহণ উভয় কাজ করতে পারে, যা bidirectional communication এর জন্য উপযুক্ত।

RxJava Subject এর ধরণ

RxJava এ বিভিন্ন প্রকারের Subject রয়েছে। প্রতিটির নির্দিষ্ট আচরণ ও ব্যবহারের ক্ষেত্রে রয়েছে।

১. PublishSubject

  • এটি ডেটা স্ট্রিমের শুধুমাত্র বর্তমান এবং পরবর্তী আইটেমগুলোর তথ্য প্রদান করে।
  • যখন নতুন Observer যুক্ত হয়, এটি শুধুমাত্র নতুন ডেটা পায়।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.PublishSubject;

public class PublishSubjectExample {
    public static void main(String[] args) {
        PublishSubject<String> subject = PublishSubject.create();

        subject.subscribe(item -> System.out.println("Observer 1: " + item));
        subject.onNext("Hello");
        subject.onNext("RxJava");

        subject.subscribe(item -> System.out.println("Observer 2: " + item)); // নতুন Observer
        subject.onNext("World");
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: World

২. BehaviorSubject

  • এটি সর্বশেষ onNext() আইটেম এবং তার পরবর্তী সব আইটেম সরবরাহ করে।
  • নতুন Observer সর্বশেষ আইটেম পায় এবং তারপর ডেটা স্ট্রিম অনুসরণ করে।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.BehaviorSubject;

public class BehaviorSubjectExample {
    public static void main(String[] args) {
        BehaviorSubject<String> subject = BehaviorSubject.create();

        subject.onNext("Hello");
        subject.subscribe(item -> System.out.println("Observer 1: " + item)); // সর্বশেষ আইটেম পায়
        subject.onNext("RxJava");
        subject.onNext("World");

        subject.subscribe(item -> System.out.println("Observer 2: " + item)); // সর্বশেষ আইটেম পায়
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: World

৩. ReplaySubject

  • এটি পুরো ডেটা স্ট্রিমকে সংরক্ষণ করে এবং নতুন Observer এ যোগ দেওয়ার পরে সমস্ত পূর্ববর্তী আইটেম সরবরাহ করে।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.ReplaySubject;

public class ReplaySubjectExample {
    public static void main(String[] args) {
        ReplaySubject<String> subject = ReplaySubject.create();

        subject.onNext("Hello");
        subject.onNext("RxJava");

        subject.subscribe(item -> System.out.println("Observer 1: " + item));
        subject.onNext("World");

        subject.subscribe(item -> System.out.println("Observer 2: " + item)); // সমস্ত আইটেম পায়
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: World
Observer 2: Hello
Observer 2: RxJava
Observer 2: World

৪. AsyncSubject

  • এটি ডেটা স্ট্রিমের শুধুমাত্র সর্বশেষ আইটেম প্রদান করে, যখন স্ট্রিম সম্পূর্ণ হয়।
  • onComplete() কল হওয়ার পর এটি ডেটা প্রদান করে।

কোড উদাহরণ:

import io.reactivex.rxjava3.subjects.AsyncSubject;

public class AsyncSubjectExample {
    public static void main(String[] args) {
        AsyncSubject<String> subject = AsyncSubject.create();

        subject.onNext("Hello");
        subject.onNext("RxJava");
        subject.onNext("World");

        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onComplete(); // শেষ ডেটা প্রদান করা হয়
    }
}

আউটপুট:

Observer 1: World

৫. UnicastSubject

  • এটি একমাত্র একটি Observer এর জন্য কাজ করে। যদি একাধিক Observer যুক্ত করা হয়, এটি ত্রুটি ছোড়ে।

Subject এর কার্যপ্রণালী

  1. Observer হিসাবে কাজ করা:
    • Subject এর মাধ্যমে ডেটা গ্রহণ করা যায়।
    • এটি onNext(), onError(), এবং onComplete() মেথডের মাধ্যমে ডেটা হ্যান্ডেল করে।
  2. Observable হিসাবে কাজ করা:
    • ডেটা স্ট্রিমকে একাধিক Observer এর মধ্যে বিতরণ করে।
    • subscribe() মেথড ব্যবহার করে Observer যুক্ত করা হয়।

Subject এর ব্যবহার ক্ষেত্র

  1. Multicasting Events:
    • একাধিক ক্লায়েন্ট বা Observer কে একই ইভেন্ট পাঠাতে।
  2. Hot Streams:
    • ডেটা স্ট্রিম প্রক্রিয়া যেখানে স্ট্রিমের ডেটা সর্বদা পরিবর্তনশীল।
  3. Manual Data Emission:
    • onNext() ব্যবহার করে ম্যানুয়ালি ডেটা ইমিট করতে।

সংক্ষেপে

RxJava এর Subject হলো একটি শক্তিশালী টুল, যা Observable এবং Observer উভয়ের মতো আচরণ করে। এটি ডেটা স্ট্রিম শেয়ার করতে, ম্যানুয়ালি ডেটা প্রেরণ করতে, এবং একাধিক সাবস্ক্রাইবারের সাথে যোগাযোগ বজায় রাখতে অপরিহার্য। বিভিন্ন ধরণের Subject এর ব্যবহার নির্ভর করে নির্দিষ্ট সমস্যা সমাধানের উপর।

Content added By

PublishSubject, BehaviorSubject, ReplaySubject, এবং AsyncSubject

155

RxJava-তে Subjects হলো একটি বিশেষ Observable টাইপ, যা একই সাথে Observable এবং Observer হিসাবে কাজ করে। এগুলো ডেটা স্ট্রিম তৈরি ও শেয়ার করার জন্য ব্যবহৃত হয়।
RxJava-তে প্রধানত চার ধরণের Subject রয়েছে:


1. PublishSubject

  • ব্যবহার: এটি সাবস্ক্রাইব করার পর থেকে ডেটা স্ট্রিম প্রদান শুরু করে। পূর্ববর্তী ডেটা স্ট্রিম প্রদান করে না।
  • উদাহরণ: রিয়েল-টাইম ডেটা ইভেন্ট শেয়ার করা।
import io.reactivex.rxjava3.subjects.PublishSubject;

public class PublishSubjectExample {
    public static void main(String[] args) {
        PublishSubject<String> subject = PublishSubject.create();

        subject.subscribe(item -> System.out.println("Observer 1: " + item));
        
        subject.onNext("Item 1");
        subject.onNext("Item 2");

        subject.subscribe(item -> System.out.println("Observer 2: " + item));

        subject.onNext("Item 3");
        subject.onComplete();
    }
}

আউটপুট:

Observer 1: Item 1  
Observer 1: Item 2  
Observer 1: Item 3  
Observer 2: Item 3  

2. BehaviorSubject

  • ব্যবহার: সর্বশেষ প্রেরিত ডেটা স্মরণ রাখে এবং নতুন সাবস্ক্রাইবারদের সেই ডেটা প্রদান করে।
  • উদাহরণ: সর্বশেষ স্টেট ধরে রাখা।
import io.reactivex.rxjava3.subjects.BehaviorSubject;

public class BehaviorSubjectExample {
    public static void main(String[] args) {
        BehaviorSubject<String> subject = BehaviorSubject.create();

        subject.onNext("Initial");
        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onNext("Item 1");
        subject.onNext("Item 2");

        subject.subscribe(item -> System.out.println("Observer 2: " + item));
    }
}

আউটপুট:

Observer 1: Initial  
Observer 1: Item 1  
Observer 1: Item 2  
Observer 2: Item 2  

3. ReplaySubject

  • ব্যবহার: সাবস্ক্রাইবারদের কাছে সম্পূর্ণ ডেটা স্ট্রিম পুনরায় প্রদান করে, চাইলেই সাবস্ক্রিপশনের সময় নির্ধারণ করা যায়।
  • উদাহরণ: পূর্ববর্তী ইভেন্ট ডেটা শেয়ার করা।
import io.reactivex.rxjava3.subjects.ReplaySubject;

public class ReplaySubjectExample {
    public static void main(String[] args) {
        ReplaySubject<String> subject = ReplaySubject.create();

        subject.onNext("Item 1");
        subject.onNext("Item 2");

        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onNext("Item 3");

        subject.subscribe(item -> System.out.println("Observer 2: " + item));

        subject.onComplete();
    }
}

আউটপুট:

Observer 1: Item 1  
Observer 1: Item 2  
Observer 1: Item 3  
Observer 2: Item 1  
Observer 2: Item 2  
Observer 2: Item 3  

4. AsyncSubject

  • ব্যবহার: ডেটা স্ট্রিমের সর্বশেষ উপাদান শুধুমাত্র প্রদান করে।
  • উদাহরণ: শেষের আউটপুট বা রেজাল্ট প্রদান করা।
import io.reactivex.rxjava3.subjects.AsyncSubject;

public class AsyncSubjectExample {
    public static void main(String[] args) {
        AsyncSubject<String> subject = AsyncSubject.create();

        subject.onNext("Item 1");
        subject.onNext("Item 2");
        subject.onNext("Item 3");

        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onComplete();

        subject.subscribe(item -> System.out.println("Observer 2: " + item));
    }
}

আউটপুট:

Observer 1: Item 3  
Observer 2: Item 3  

সারণী: Subjects তুলনা

Subjectডেটা স্মরণ রাখে?নতুন সাবস্ক্রাইবারদের ডেটা প্রদানশেষের ডেটা প্রদান
PublishSubjectনাকেবল নতুন ইভেন্টনা
BehaviorSubjectহ্যাঁসর্বশেষ ইভেন্ট এবং নতুন ইভেন্টনা
ReplaySubjectহ্যাঁসমস্ত পুরানো এবং নতুন ইভেন্টনা
AsyncSubjectনানাহ্যাঁ

কখন কোন Subject ব্যবহার করবেন?

  1. PublishSubject: রিয়েল-টাইম ইভেন্ট শেয়ারিং।
  2. BehaviorSubject: সর্বশেষ ডেটা ধরে রাখা প্রয়োজন হলে।
  3. ReplaySubject: সমস্ত ইভেন্ট পুনরায় শেয়ার করতে চাইলে।
  4. AsyncSubject: কেবলমাত্র চূড়ান্ত আউটপুট প্রয়োজন হলে।

আপনার যদি আরও বিস্তারিত প্রয়োজন হয়, জানাবেন! 😊

Content added By

Cold এবং Hot Observables এর সাথে Subject এর ব্যবহার

163

RxJava-তে Cold Observable এবং Hot Observable ডেটা স্ট্রিমের দুইটি ভিন্ন ধরন। এগুলো asynchronous ডেটা emission পরিচালনা করে ভিন্ন উপায়ে। এর সাথে, Subject ব্যবহার করে Observables এবং Observers-এর মধ্যে ব্রিজ তৈরি করা যায়।


Cold Observable

  • Cold Observables subscriber-এর জন্য আলাদা data stream তৈরি করে।
  • Data emission তখনই শুরু হয় যখন কোনো subscriber Observable-এ subscribe করে।
  • প্রতিটি subscriber একই data stream পুনরায় পায়।

উদাহরণ: Cold Observable

import io.reactivex.rxjava3.core.Observable;

public class ColdObservableExample {
    public static void main(String[] args) {
        Observable<Integer> coldObservable = Observable.just(1, 2, 3);

        // প্রথম subscriber
        coldObservable.subscribe(item -> System.out.println("Subscriber 1: " + item));

        // দ্বিতীয় subscriber
        coldObservable.subscribe(item -> System.out.println("Subscriber 2: " + item));
    }
}

Output:

Subscriber 1: 1
Subscriber 1: 2
Subscriber 1: 3
Subscriber 2: 1
Subscriber 2: 2
Subscriber 2: 3

বৈশিষ্ট্য:

  • প্রতিটি subscriber ডেটা emission পুনরায় শুরু করে।
  • API calls, database queries ইত্যাদিতে ব্যবহৃত হয়।

Hot Observable

  • Hot Observables subscriber-এমিশনের সময়ই ডেটা স্ট্রিম তৈরি করে।
  • একটি shared data stream ব্যবহার করা হয়।
  • নতুন subscriber আগে emitted ডেটা পায় না, কেবল নতুন ডেটা পায়।

উদাহরণ: Hot Observable (Subject ব্যবহার করে)

import io.reactivex.rxjava3.subjects.PublishSubject;

public class HotObservableExample {
    public static void main(String[] args) {
        PublishSubject<Integer> hotObservable = PublishSubject.create();

        // প্রথম subscriber
        hotObservable.subscribe(item -> System.out.println("Subscriber 1: " + item));

        // ডেটা emission শুরু
        hotObservable.onNext(1);
        hotObservable.onNext(2);

        // দ্বিতীয় subscriber যোগ করা
        hotObservable.subscribe(item -> System.out.println("Subscriber 2: " + item));

        hotObservable.onNext(3);
        hotObservable.onComplete();
    }
}

Output:

Subscriber 1: 1
Subscriber 1: 2
Subscriber 1: 3
Subscriber 2: 3

বৈশিষ্ট্য:

  • নতুন subscriber পূর্বে emitted ডেটা পায় না।
  • UI events, sensor data ইত্যাদির জন্য উপযুক্ত।

Subject-এর ভূমিকা

Subject RxJava-তে একটি বিশেষ কম্পোনেন্ট, যা Observable এবং Observer দুটোরই বৈশিষ্ট্য বহন করে। এটি Hot Observable তৈরিতে ব্যবহৃত হয়।

প্রধান প্রকারের Subject

  1. PublishSubject
    • শুধুমাত্র নতুন subscribers-এর জন্য নতুন emitted ডেটা পাঠায়।
  2. BehaviorSubject
    • সর্বশেষ emitted ডেটা এবং এর পরে নতুন ডেটা পাঠায়।
  3. ReplaySubject
    • পূর্বে emitted সমস্ত ডেটা এবং পরবর্তী নতুন ডেটা পাঠায়।
  4. AsyncSubject
    • শুধুমাত্র শেষ emitted ডেটা পাঠায় (completion signal-এর পরে)।

উদাহরণ: BehaviorSubject

import io.reactivex.rxjava3.subjects.BehaviorSubject;

public class BehaviorSubjectExample {
    public static void main(String[] args) {
        BehaviorSubject<String> behaviorSubject = BehaviorSubject.create();

        // প্রথম subscriber যোগ করা
        behaviorSubject.subscribe(item -> System.out.println("Subscriber 1: " + item));

        behaviorSubject.onNext("A");
        behaviorSubject.onNext("B");

        // দ্বিতীয় subscriber যোগ করা
        behaviorSubject.subscribe(item -> System.out.println("Subscriber 2: " + item));

        behaviorSubject.onNext("C");
        behaviorSubject.onComplete();
    }
}

Output:

Subscriber 1: A
Subscriber 1: B
Subscriber 2: B
Subscriber 1: C
Subscriber 2: C

Cold vs Hot Observable তুলনা

বৈশিষ্ট্যCold ObservableHot Observable
Data EmissionSubscribe করার পর শুরু হয়।নিরবচ্ছিন্নভাবে emission হয়।
Subscribersপ্রতিটি subscriber নতুন স্ট্রিম পায়।একই স্ট্রিম শেয়ার করে।
Example Use CasesAPI calls, database queries।UI events, sensor data।

উপসংহার

  • Cold Observable: প্রতিটি subscriber-এর জন্য ডেটা পুনরায় প্রদান করে।
  • Hot Observable: নতুন subscriber-এর জন্য কেবল নতুন emitted ডেটা প্রদান করে।
  • Subject ব্যবহার করে Observables-কে Hot করা সম্ভব, এবং এটি Observables এবং Observers-এর মধ্যে ব্রিজ হিসেবে কাজ করে।

আপনার প্রয়োজন অনুযায়ী Cold বা Hot Observables নির্বাচন করে ডেটা স্ট্রিম পরিচালনা করুন।

Content added By

উদাহরণ সহ Subject তৈরি এবং ব্যবহার

180

Subject RxJava-র একটি গুরুত্বপূর্ণ component যা Observable এবং Observer উভয়ের মতো কাজ করে। এটি একই সময়ে data emit (প্রকাশ) এবং consume (গ্রহণ) করতে পারে।


Subject-এর ধরন

RxJava-তে বিভিন্ন প্রকারের Subject রয়েছে, এবং প্রতিটির নিজস্ব ব্যবহার ক্ষেত্রে আলাদা বৈশিষ্ট্য থাকে। প্রধান Subject-গুলো হল:

  1. PublishSubject
  2. BehaviorSubject
  3. ReplaySubject
  4. AsyncSubject

1. PublishSubject

PublishSubject শুধুমাত্র subscribe হওয়ার পরবর্তী ডেটা emit করে। এটি পূর্ববর্তী ডেটা সংরক্ষণ করে না।

উদাহরণ:

import io.reactivex.subjects.PublishSubject;

public class PublishSubjectExample {
    public static void main(String[] args) {
        PublishSubject<String> subject = PublishSubject.create();

        // প্রথম Observer
        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onNext("Hello");
        subject.onNext("RxJava");

        // দ্বিতীয় Observer (পরে subscribe হয়েছে)
        subject.subscribe(item -> System.out.println("Observer 2: " + item));

        subject.onNext("Subject");
        subject.onComplete();
    }
}

আউটপুট:

Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: Subject

2. BehaviorSubject

BehaviorSubject সর্বশেষ emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সেটি প্রদান করে।

উদাহরণ:

import io.reactivex.subjects.BehaviorSubject;

public class BehaviorSubjectExample {
    public static void main(String[] args) {
        BehaviorSubject<String> subject = BehaviorSubject.create();

        subject.onNext("Initial");

        // প্রথম Observer
        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onNext("Hello");
        subject.onNext("RxJava");

        // দ্বিতীয় Observer (পরে subscribe হয়েছে)
        subject.subscribe(item -> System.out.println("Observer 2: " + item));

        subject.onNext("Subject");
        subject.onComplete();
    }
}

আউটপুট:

Observer 1: Initial
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: RxJava
Observer 2: Subject

3. ReplaySubject

ReplaySubject সমস্ত emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সব ডেটা প্রদান করে।

উদাহরণ:

import io.reactivex.subjects.ReplaySubject;

public class ReplaySubjectExample {
    public static void main(String[] args) {
        ReplaySubject<String> subject = ReplaySubject.create();

        subject.onNext("Initial");
        subject.onNext("Hello");

        // প্রথম Observer
        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onNext("RxJava");

        // দ্বিতীয় Observer (পরে subscribe হয়েছে)
        subject.subscribe(item -> System.out.println("Observer 2: " + item));

        subject.onNext("Subject");
        subject.onComplete();
    }
}

আউটপুট:

Observer 1: Initial
Observer 1: Hello
Observer 1: RxJava
Observer 1: Subject
Observer 2: Initial
Observer 2: Hello
Observer 2: RxJava
Observer 2: Subject

4. AsyncSubject

AsyncSubject শুধুমাত্র শেষ emit হওয়া ডেটা প্রদান করে, এবং onComplete() কল করার পর এটি সক্রিয় হয়।

উদাহরণ:

import io.reactivex.subjects.AsyncSubject;

public class AsyncSubjectExample {
    public static void main(String[] args) {
        AsyncSubject<String> subject = AsyncSubject.create();

        subject.onNext("Initial");
        subject.onNext("Hello");
        subject.onNext("RxJava");

        // প্রথম Observer
        subject.subscribe(item -> System.out.println("Observer 1: " + item));

        subject.onNext("Subject");
        subject.onComplete();

        // দ্বিতীয় Observer (onComplete এর পরে subscribe হয়েছে)
        subject.subscribe(item -> System.out.println("Observer 2: " + item));
    }
}

আউটপুট:

Observer 1: Subject
Observer 2: Subject

উপসংহার

RxJava-র Subject-গুলো বিভিন্ন প্রোগ্রামিং পরিস্থিতিতে ব্যবহারের জন্য অত্যন্ত উপযোগী।

Subject প্রকারব্যবহার
PublishSubjectশুধুমাত্র subscribe হওয়ার পর emit হওয়া ডেটা প্রদান করে।
BehaviorSubjectসর্বশেষ emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের সেটি প্রদান করে।
ReplaySubjectসমস্ত emit হওয়া ডেটা সংরক্ষণ করে এবং নতুন subscribers-দের প্রদান করে।
AsyncSubjectশুধুমাত্র শেষ emit হওয়া ডেটা প্রদান করে।

প্রতিটি Subject নির্দিষ্ট পরিস্থিতিতে ব্যবহার করলে data streams পরিচালনা আরও কার্যকর হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...